package com.marvels.approve.process.dao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.github.pagehelper.Page;
import com.marvels.approve.common.dto.AttachmentInfoDTO;
import com.marvels.approve.common.dto.EstateInfoDTO;
import com.marvels.approve.common.dto.FakeInfoDTO;
import com.marvels.approve.common.dto.InsuranceCheckDTO;
import com.marvels.approve.common.dto.InsurancePolicyDTO;
import com.marvels.approve.common.dto.LoanApplyContactInfoDTO;
import com.marvels.approve.common.dto.LoanContactCheckDTO;
import com.marvels.approve.common.dto.LoanFeelInfoDTO;
import com.marvels.approve.common.dto.PhoneCheckDTO;
import com.marvels.approve.common.dto.RiskCheckInfoDTO;
import com.marvels.approve.common.dto.TrickCheckInfoDTO;
import com.marvels.approve.loan.dto.McamLoanApplyInfoDTO;
import com.marvels.approve.process.dto.LoanApplyCaseDTO;

public interface TaskProcessDao {
	
	/***
	 * 通过状态查询详情
	 * @param dto
	 * @return
	 */
	List<McamLoanApplyInfoDTO> queryLoanApplyInfo(McamLoanApplyInfoDTO dto);
	
	/**
	 * 更新进件状态
	 * @param dto
	 * @return
	 */
	Integer updateLoanStatus(McamLoanApplyInfoDTO dto);
	/**
	 * 查询贷款产品进件
	 * @param loanId
	 * @return
	 */
	List<McamLoanApplyInfoDTO> selectLoanApplyInfoList(String loanId);
	
	/**
	 * 查询贷款产品进件详情
	 * @param loanId
	 * @return
	 */
	McamLoanApplyInfoDTO selectLoanApplyInfo(String loanId);
	
	/**
	 * 查询贷款保单信息
	 * @param loanId
	 * @return
	 */
	InsurancePolicyDTO selectInsurancePolicyInfo(String loanId);
	
	/**
	 * 查询保单核录信息
	 * @param loanId
	 * @return
	 */
	InsuranceCheckDTO selectInsuranceCheckInfo(String loanId);
	
	/**
	 * 查询录音文件列表
	 * @param loanId
	 * @param atmtType
	 * @return
	 */
	List<AttachmentInfoDTO> selectAttachmentList(@Param("loanId")String loanId,@Param("atmtType")String atmtType);
	
	/**
	 * 查询房产信息
	 * @param loanId
	 * @return
	 */
	List<EstateInfoDTO> selectEstateList(String loanId);
	
	/**
	 * 新增房产信息
	 * @param estate
	 * @return
	 */
	Integer insertEstate(List<EstateInfoDTO> list);
	
	/**
	 * 更新房产信息
	 * @param estate
	 * @return
	 */
	Integer updateEstate(List<EstateInfoDTO> list);
	
	/**
	 * 更新贷款信息
	 * @param loanInfo
	 * @return
	 */
	Integer updateLoanInfo(McamLoanApplyInfoDTO loanInfo);
	
	/**
	 * 更新保单信息
	 * @param insurancePolicyDto
	 * @return
	 */
	Integer updateInsurancePolicy(InsurancePolicyDTO insurancePolicyDto);
	
	/**
	 * 更新保单核录信息
	 * @param insuranceCheckDto
	 * @return
	 */
	Integer updateInsuranceCheck(InsuranceCheckDTO insuranceCheckDto);
	
	/**
	 * 删除房产信息
	 * @param estateInfo
	 * @return
	 */
	Integer deleteEstateInfo(EstateInfoDTO estateInfo);
	
	/**
	 * 查询联系人信息
	 * @param loanId
	 * @return
	 */
	List<LoanApplyContactInfoDTO> selectContacts(String loanId);

	/**
	 * 查询联系人验证结果
	 * @param loanId
	 * @return
	 */
	List<LoanContactCheckDTO> selectContactChecks(String loanId);
	
	 /** 查询开心购信息
	 * @param loanId
	 * @return
	 */
	List<LoanFeelInfoDTO> selectFeelChecks(String loanId);

	/**
	 * 查询电核录入
	 * @param loanId
	 * @return
	 */
	List<PhoneCheckDTO> selectPhoneChecks(String loanId);
	
	/**
	 * 更新客户信息
	 * @param loanInfo
	 * @return
	 */
	Integer updateCustomerInfo(McamLoanApplyInfoDTO loanInfo);
	
	/**
	 * 新增联系人信息
	 * @param list
	 * @return
	 */
	Integer insertContact(LoanApplyContactInfoDTO contact);
	
	/**
	 * 更新联系人信息
	 * @param list
	 * @return
	 */
	Integer updateContactList(List<LoanApplyContactInfoDTO> list);
	
	/**
	 * 新增联系人验证结果
	 * @param contactChk
	 * @return
	 */
	Integer insertContactChk(LoanContactCheckDTO contactChk);
	
	/**
	 * 更新联系人验证结果
	 * @param list
	 * @return
	 */
	Integer updateContactChkList(List<LoanContactCheckDTO> list);
	
	/**
	 * 新增电核记录
	 * @param list
	 * @return
	 */
	Integer insertPhoneChkList(List<PhoneCheckDTO> list);
	
	/**
	 * 更新电核记录
	 * @param list
	 * @return
	 */
	Integer updatePhoneChkList(List<PhoneCheckDTO> list);
	
	/**
	 * 查询历史贷款产品
	 * @param loanInfo
	 * @return
	 */
	Page<McamLoanApplyInfoDTO> selectHistoryLoanInfoPage(McamLoanApplyInfoDTO loanInfo);
	
	/**
	 * 查询欺诈检核记录
	 * @param loanInfo
	 * @return
	 */
	Page<TrickCheckInfoDTO> selectTrickCheckInfoPage(McamLoanApplyInfoDTO loanInfo);
	
	/**
	 * 查询风险检核记录
	 * @param loanInfo
	 * @return
	 */
	Page<RiskCheckInfoDTO> selectRiskCheckInfoPage(McamLoanApplyInfoDTO loanInfo);
	
	/**
	 * 删除欺诈检核结果
	 * @param loanId
	 * @return
	 */
	Integer deleteTrickCheckDataByLoanId(String loanId);
	
	/**
	 * 删除风险检核结果
	 * @param loanId
	 * @return
	 */
	Integer deleteRiskCheckDataByLoanId(String loanId);
	
	/**
	 * 动态条件查询欺诈数据
	 * @param column
	 * @param condition
	 * @return
	 */
	List<FakeInfoDTO> selectFakeInfoByCondition(@Param("column")String column,@Param("condition")String condition);
	
	/**
	 * 新增欺诈检核结果
	 * @param list
	 * @return
	 */
	Integer insertTrickCheckList(List<TrickCheckInfoDTO> list);
	
	/**
	 * 计算地址权重
	 * @param companyAddr
	 * @param fakeCompanyAddr
	 * @return
	 */
	BigDecimal calculateAddrWeights(@Param("companyAddr")String companyAddr,@Param("fakeCompanyAddr")String fakeCompanyAddr);
	
	/**
	 * 动态条件查询风险数据
	 * @param columns
	 * @param loanApplyInfo
	 * @param conditionType
	 * 1 = 证件号码+客户姓名
	 * 2 = 手机号码:手机号码
	 * 3 = 手机号码：直系联系人手机
	 * 4 = 手机号码：联系人手机
	 * 5 = 直系联系人手机号码：手机号码
	 * 6 = 直系联系人手机号码：直系联系人手机
	 * 7 = 直系联系人手机号码：联系人手机
	 * 8 = 联系人手机：手机号码
	 * 9 = 联系人手机：直系联系人手机
	 * 10 = 联系人手机：联系人手机
	 * 11 = 单位电话：单位电话
	 * 12 = 单位名称：单位名称
	 * @return
	 */
	List<RiskCheckInfoDTO> selectRiskCheckInfoByHistoryLoanInfo(@Param("list")List<String> columns,
			@Param("loanApplyInfo")McamLoanApplyInfoDTO loanApplyInfo,@Param("conditionType")Integer conditionType);
	
	/**
	 * 新增风险检核结果
	 * @param list
	 * @return
	 */
	Integer insertRiskCheckList(List<RiskCheckInfoDTO> list);
	
	/**
	 * 查询工单跟踪日志
	 * @param loanId
	 * @return
	 */
	LoanApplyCaseDTO selectCaseLogs(String loanId);
	/**
	 * 更新合同号
	 * @param loanInfo
	 * @return
	 */
	int updateContractNo(McamLoanApplyInfoDTO loanInfo);
	/**
	 * 更新入池时间
	 * @param intoPoolTime
	 * @param loanId
	 * @return
	 */
	int updateIntoPoolTime(@Param("intoPoolTime")Date intoPoolTime,@Param("loanId")String loanId);
	/**
	 * 更新状态为P05
	 * @param loanId
	 * @return
	 */
	int updateLoanStatusToP05(@Param("loanId")String loanId);
	/**
	 * 保存保单核录信息
	 * @param insuranceCheckDto
	 * @return
	 */
	int saveInsuranceCheck(InsuranceCheckDTO insuranceCheckDto);
}
